#ifndef _MYSTRING_H_
#define _MYSTRING_H_

#include <stdbool.h>
#include <string.h>
#define INITSTR(s) MyStr s; InitString(&s);
#define INSERTSTR(s,str)  INITSTR(s); InsertString(&s,str);
struct StdMyString
{
    char *string;
    int size; //申请的堆上空间
    int len; //实际的字符串长度
};

typedef struct StdMyString MyStr;


//结构体的前置声明
struct StdStringList;
typedef struct StdStringList MyStrList;

void InitString(MyStr * s);
bool InsertString(MyStr*s,const char * str);
bool InsertByIndex(MyStr *s,const char *str,int index);
bool InsertChar(MyStr*s,char c,int index);
bool RemoveString(MyStr * s,const char * str);
bool IsContains(MyStr * s,const char * str);
bool IsEqual(MyStr *s ,const char *str);
//不区分大小写比较
bool IsEqualCaseInsensitive(MyStr*s,const char * str);
//全变大写
MyStr ToUpper(const char *str);
MyStr ToLower(const char *str);
int StringToInt(MyStr*s);
double StringToDouble(MyStr *s);
MyStr CopyString(const MyStr *s);
MyStr GetString(const char *s);
//手动扩容
bool ResizeString(MyStr *s,long newSize);
//字符串切割
MyStrList Split(const char *src,const char *delim);
void ClearString(MyStr * s);




struct StdStringList
{
    MyStr *stringList;
    int len;  //长度
    int size; //容量
};


void InitMyStringList( MyStrList * list);
bool InsertTail(MyStrList *list,const MyStr *str);
//按位置删除字符串
bool RemoveMyStrByIndex(MyStrList *list,int index);
//删除字符串
bool RemoveMyString(MyStrList*list,const char * str);
//遍历字符串数组
void DisplayStringList(MyStrList *list);
void ClearMyStringList(MyStrList*list);

#endif